package com.luboyan.CBillbill.service.user;

import com.alibaba.fastjson.JSONObject;
import com.luboyan.CBillbill.dao.file.Video;
import com.luboyan.CBillbill.dao.user.User;
import com.luboyan.CBillbill.dao.user.UserInfo;
import com.luboyan.CBillbill.dao.vo.PageVo;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * 用户登录信息业务逻辑接口
 */
@Service
public interface UserService {

    /**
     * 添加用户
     */
    void addUser(User user);

    /**
     * 登录
     */
    String login(User user);

    /**
     * 通过单个id获取用户账号信息
     */
    User getUserInfo(Long userId);

    /**
     * 更新用户账号信息
     */
    void updateUser(User user) throws Exception;

    /**
     * 更新用户基本信息
     */
    void updateUserInfo(UserInfo user);

    /**
     * 通过id查询用户
     */
    User getById(Long id);

    /**
     * 通过userId批量查询用户基本信息
     */
    List<UserInfo> getUserInfoByIds(Set<Long> followingIds);

    /**
     * 分页获取用户信息，用于在搜索后展示，还可以顺便判断是否被当前用户关注
     */
    PageVo<UserInfo> getPageUserInfos(JSONObject params);

    /**
     * 双token登录机制
     */
    Map<String, Object> dLogin(User user);

    /**
     * 退出登录
     */
    void logout(String refreshToken);

    /**
     * 刷新token
     */
    String refreshToken(String refreshToken);

    /**
     * 返回用户的视频
     */
    PageVo<Video> getVideosByUserId(Integer page, Integer pageSize,Long userId);
}
